Registered S3 method overwritten by 'data.table':
method from
print.data.table
data.table 1.12.8 using 8 threads (see ?getDTthreads). Latest news: r-datatable.com
Evolution In Switzerland, Western Europe, and Hubei Province (China)
The figures do not represent the same thing in each country, depending on the extent of the screening tests carried out. Regardless of this problem, the weekly and daily trend curves allow you to get an idea of the foreseeable evolution for the next days (assuming that the screening strategy does not change over time). Respectively, it provides an indication of a possible inflection of the progression of the epidemic in the near future.
Comparison of Number of Confirmed Cases


Comparison of Number of Deaths


Comparison of Number of Recovered Cases
WARNING: The figures seem to be wrong on March 23, 2020.


Comparison of Number of Active Cases
WARNING: The figures seem to be wrong on March 23, 2020.


LS0tCnRpdGxlOiAiQ09WSUQtMTkgaW4gU3dpdHplcmxhbmQgYW5kIFdlc3Rlcm4gRXVyb3BlIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICBkZl9wcmludDogZGVmYXVsdAogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvYzogeWVzCiAgaHRtbF9ub3RlYm9vazogCiAgICBmaWdfaGVpZ2h0OiA1CiAgICBmaWdfd2lkdGg6IDcKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2M6IHllcwogIHdvcmRfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKZGF0ZTogIkxhc3QgdXBkYXRlZDogYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVkgLSAlSDolTScpYCIKYXV0aG9yOiAiUGhpbGlwcGUgRG9jb3VydCIKLS0tCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KbGlicmFyeShkYXRhLnRhYmxlKQoKZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yIDwtIGZ1bmN0aW9uKGRmKSB7CiAgdG1wIDwtIHN1YnNldChkZiwgc2VsZWN0ID0gLWMoUHJvdmluY2UuU3RhdGUsIExhdCwgTG9uZykpCiAgdG1wIDwtIHNhcHBseShhcy52ZWN0b3IodHJhbnNwb3NlKHRtcCkpLCBhcy5pbnRlZ2VyKQogIHJldHVybih0bXApCn0KCnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkgPC0gZnVuY3Rpb24oY291bnRyeS5jb25maXJtZWQsIGNvdW50cnkuZGVhdGhzLCBjb3VudHJ5LnJlY292ZXJlZCwgY291bnRyeS5uYW1lLCBwdWJsaWMuc3BhY2VzLmNsb3NlZC5hdD1OQSwgY29uZmluZW1lbnQuYXQ9TkEpIHsKICAgIGRheS5jb3VudCA8LSBucm93KGNvdW50cnkuY29uZmlybWVkKQogIHlsaW0gPC0gYygwLCAxLjMgKiBtYXgoY291bnRyeS5jb25maXJtZWQsIG5hLnJtID0gVFJVRSkpCiAgZGF5LnN0YXJ0IDwtIG1pbihjKDM1LCBwdWJsaWMuc3BhY2VzLmNsb3NlZC5hdCwgY29uZmluZW1lbnQuYXQpLCBuYS5ybSA9IFRSVUUpCiAgcGxvdChjb3VudHJ5LmNvbmZpcm1lZCwgbWFpbj0gcGFzdGUoIkNhc2VzIGluIiwgY291bnRyeS5uYW1lKSwgdHlwZSA9ICJvIiwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBDYXNlcyIsIGNvbCA9ICJyZWQiLCB4bGltID0gIGMoZGF5LnN0YXJ0LCBkYXkuY291bnQgKyA3KSwgeWxpbSA9IHlsaW0pCiAgbGluZXMoc2VxKDEsIGxlbmd0aChjb3VudHJ5LmRlYXRocykpLCBjb3VudHJ5LmRlYXRocywgdHlwZSA9ICJsIiwgY29sID0gImJsYWNrIiwgbHR5ID0gMSwgbHcgPSAxKQogIGxpbmVzKHNlcSgxLCBsZW5ndGgoY291bnRyeS5yZWNvdmVyZWQpKSwgY291bnRyeS5yZWNvdmVyZWQsIHR5cGUgPSAibCIsIGNvbCA9ICJncmVlbiIsIGx0eSA9IDEsIGx3ID0gMSkKICBncmlkKCkKICBheGlzKHNpZGUgPSAxLCBhdCA9IHNlcShkYXkuc3RhcnQgJS8lIDUgKiA1LCBkYXkuY291bnQsIDUpKQogIAogICMgVHJlbmQgYmFzZWQgb24gbGFzdCB0d28gb2JzZXJ2YXRpb25zIChsYXN0IGRheSkuCiAgbGFzdC5jb25maXJtZWQgPC0gdGFpbChjb3VudHJ5LmNvbmZpcm1lZCwgbiA9IDIpCiAgZHkgPC1sYXN0LmNvbmZpcm1lZFsyXSAtIGxhc3QuY29uZmlybWVkWzFdCiAgc2xvcGUgPC0gZHkKICB1IDwtIGMoMSwgZHkpCiAgYSA8LSBsYXN0LmNvbmZpcm1lZFsxXSAtIChkYXkuY291bnQgLSAxKSAqIHNsb3BlCiAgYWJsaW5lKGEgPSBhLCBiID0gc2xvcGUsIGNvbCA9ICJ2aW9sZXQiLCBsdyA9IDEuNSwgbHR5ID0gNCkKICBsYXN0LnByb2dyZXNzaW9uLnBjdCA8LSByb3VuZCgoMTAwICogZHkpIC8gbGFzdC5jb25maXJtZWRbMV0pCiAgdGV4dCh4ID0gZGF5LmNvdW50IC0gNCwgeSA9IDAuNSAqIHlsaW1bMl0sIHBhc3RlKGR5LCAiY2FzZXMvZGF5XG5FeHRyYXBvbGF0aW9uOiIsIGR5ICogNywgImNhc2Uvd2Vla1xuIiwgbGFzdC5wcm9ncmVzc2lvbi5wY3QsICIlIHByb2dyZXNzIGxhc3QgZGF5IiksIHNydCA9IDIwLCBjb2wgPSAidmlvbGV0IikKICAKICAjIFRyZW5kIGJhc2VkIG9uIGxhc3QgOCBvYnNlcnZhdGlvbnMgKDcgaW50ZXJ2YWxzLCBvbmUgd2VlaykKICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gOCkKICBkeSA8LWxhc3QuY29uZmlybWVkWzhdIC0gbGFzdC5jb25maXJtZWRbMV0KICBzbG9wZSA8LSBkeSAvIDcKICB1IDwtIGMoNywgZHkpCiAgYSA8LSBsYXN0LmNvbmZpcm1lZFsxXSAtIChkYXkuY291bnQgLSA3KSAqIHNsb3BlCiAgYWJsaW5lKGEgPSBhLCBiID0gc2xvcGUsIGNvbCA9ICJibGFjayIsIGx3ID0gMS41LCBsdHkgPSA0KQogIGxhc3QucHJvZ3Jlc3Npb24ucGN0IDwtIHJvdW5kKCgxMDAgKiBkeSkgLyBsYXN0LmNvbmZpcm1lZFsxXSkKICB0ZXh0KHggPSBkYXkuY291bnQgLSA2LCB5ID0gMC44NyAqIHlsaW1bMl0sIHBhc3RlKGR5LCAiY2FzZXMvd2Vla1xuQXZnOiIsIGR5ICUvJSA3LCAiY2FzZS9kYXlcbiIsIGxhc3QucHJvZ3Jlc3Npb24ucGN0LCAiJSBwcm9ncmVzcyBsYXN0IHdlZWsiKSwgc3J0ID0gMjAsIGNvbCA9ICJibGFjayIpCiAgCiAgIyBTaG93IHNwZWNpYWwgbWVhc3VyZXMgYWdhaW5zdCBwcm9wYWdhdGlvbi4KICB5cG9zID0gbWF4KGNvdW50cnkuY29uZmlybWVkLCBuYS5ybSA9IFRSVUUpICUvJSAzCiAgaWYgKCFpcy5uYShwdWJsaWMuc3BhY2VzLmNsb3NlZC5hdCkpIHsKICAgIGFibGluZSh2ID0gcHVibGljLnNwYWNlcy5jbG9zZWQuYXQsIGNvbCA9ICJibHVlIiwgbHcgPSAxLCBsdHkgPSA1KQogICAgdGV4dCh4ID0gcHVibGljLnNwYWNlcy5jbG9zZWQuYXQgLSAwLjUsIHkgPSB5cG9zLCAiQWxsIHB1YmxpYyBzcGFjZXMgYXJlIGNsb3NlZCIsIGNvbCA9ICJibHVlIiwgc3J0ID0gOTApCiAgfQogIGlmICghaXMubmEoY29uZmluZW1lbnQuYXQpKSB7CiAgICBhYmxpbmUodiA9IGNvbmZpbmVtZW50LmF0LCBjb2wgPSAicmVkIiwgbHcgPSAxLCBsdHkgPSA1KQogICAgdGV4dCh4ID0gY29uZmluZW1lbnQuYXQgLSAwLjUsIHkgPSB5cG9zLCAiUG9wdWxhdGlvbiBpcyBjb25maW5lZCIsIGNvbCA9ICJyZWQiLCBzcnQgPSA5MCkKICB9CiAgCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygiQ29uZmlybWVkIiwgIkRlYXRocyIsICJSZWNvdmVyZWQiLCAiQ29uZmlybWVkIHRyZW5kIGJhc2VkIG9uIGxhc3QgZGF5IiwgIkNvbmZpcm1lZCB0cmVuZCBiYXNlZCBvbiBsYXN0IHdlZWsiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgImdyZWVuIiwgInZpb2xldCIsICJibGFjayIpLCBsdHkgPSBjKHJlcCgxLCAzKSwgMiwgMyksIGx3ID0gYyhyZXAoMSwgMyksIDEuNSwgMS41KSkKICAKICBkaWZmcyA8LSBkaWZmKGNvdW50cnkuY29uZmlybWVkKQogIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIGRpZmZzLCB0eXBlID0gImgiLCBjb2wgPSAiYmx1ZSIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCBtYWluID0gcGFzdGUoIk5ldyBDb25maXJtZWQgQ2FzZXMgcGVyIERheSIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSIsIGx3ZCA9IDUpCiAgZ3JpZCgpCiAgCiAgZGlmZnMgPC0gZGlmZihjb3VudHJ5LmRlYXRocykKICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gImJsYWNrIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IERlYXRocyBwZXIgRGF5IiwgY291bnRyeS5uYW1lLCBzZXAgPSAiIGluICIpLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBEZWF0aHMgcGVyIERheSIsIGx3ZCA9IDUpCiAgZ3JpZCgpCiAgCiAgZGlmZnMgPC0gZGlmZihjb3VudHJ5LnJlY292ZXJlZCkKICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gImdyZWVuIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksICBtYWluID0gcGFzdGUoIk5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSBpbiIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkiLCBsd2QgPSA1KQogIGdyaWQoKQogIAogIGRpZmZzIDwtIGRpZmYoY291bnRyeS5jb25maXJtZWQgLSAoY291bnRyeS5kZWF0aHMgKyBjb3VudHJ5LnJlY292ZXJlZCkpCiAgcGxvdChzZXEoMiwgZGF5LmNvdW50KSwgZGlmZnMsIHR5cGUgPSAiaCIsIGNvbCA9ICJyZWQiLCB4bGltID0gIGMoZGF5LnN0YXJ0ICsgMSwgZGF5LmNvdW50KSwgbWFpbiA9IHBhc3RlKCJOZXcgQWN0aXZlIENhc2VzIHBlciBEYXkiLCBjb3VudHJ5Lm5hbWUsIHNlcCA9ICIgaW4gIiksIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IEFjdGl2ZSBDYXNlcyBwZXIgRGF5IiwgbHdkPTUpCiAgZ3JpZCgpCn0KCmNvdmlkIDwtIHJlYWQuY3N2KCJjc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X2NvbmZpcm1lZF9nbG9iYWwuY3N2IikKY292aWQuZGVhdGhzIDwtIHJlYWQuY3N2KCJjc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X2RlYXRoc19nbG9iYWwuY3N2IikKY292aWQucmVjb3ZlcmVkIDwtIHJlYWQuY3N2KCJjc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X3JlY292ZXJlZF9nbG9iYWwuY3N2IikKCmNvdW50cnkubmFtZXMgPC0gYygiU3dpdHplcmxhbmQiLCAiSXRhbHkiLCAiRnJhbmNlIiwgIkdlcm1hbnkiLCAiQXVzdHJpYSIgLCAiU3BhaW4iLCAiR3JlYXQgQnJpdGFpbiIsICJEZW5tYXJrIiwgIk5vcndheSIsICJTd2VkZW4iLCAiSWNlbGFuZCIpCmNvdW50cnkuY291bnQgPC0gbGVuZ3RoKGNvdW50cnkubmFtZXMpCmNvbCA8LSByYWluYm93KGNvdW50cnkuY291bnQpCmx0eSA8LSBzZXEoMSwgY291bnRyeS5jb3VudCkKcGNoIDwtIHNlcSgxMCwgMTAgKyBjb3VudHJ5LmNvdW50KQoKc3dpdHplcmxhbmQuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJTd2l0emVybGFuZCIpKQpzd2l0emVybGFuZC5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJTd2l0emVybGFuZCIpKQpzd2l0emVybGFuZC5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJTd2l0emVybGFuZCIpKQoKaXRhbHkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJJdGFseSIpKQppdGFseS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJJdGFseSIpKQppdGFseS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJJdGFseSIpKQoKZnJhbmNlLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRnJhbmNlIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKZnJhbmNlLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkZyYW5jZSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmZyYW5jZS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJGcmFuY2UiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQoKZ2VybWFueS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkdlcm1hbnkiKSkKZ2VybWFueS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJHZXJtYW55IikpCmdlcm1hbnkucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiR2VybWFueSIpKQoKYXVzdHJpYS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkF1c3RyaWEiKSkKYXVzdHJpYS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJBdXN0cmlhIikpCmF1c3RyaWEucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQXVzdHJpYSIpKQoKc3BhaW4uY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJTcGFpbiIpKQpzcGFpbi5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJTcGFpbiIpKQpzcGFpbi5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJTcGFpbiIpKQoKdWsuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJVbml0ZWQgS2luZ2RvbSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCnVrLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlVuaXRlZCBLaW5nZG9tIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKdWsucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiVW5pdGVkIEtpbmdkb20iICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQoKZGVubWFyay5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkRlbm1hcmsiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpkZW5tYXJrLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkRlbm1hcmsiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpkZW5tYXJrLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkRlbm1hcmsiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQoKbm9yd2F5LmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQpub3J3YXkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQpub3J3YXkucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQoKc3dlZGVuLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dlZGVuIikpCnN3ZWRlbi5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJTd2VkZW4iKSkKc3dlZGVuLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIlN3ZWRlbiIpKQoKaWNlbGFuZC5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKaWNlbGFuZC5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCmljZWxhbmQucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQoKaHViZWkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJDaGluYSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiSHViZWkiKSkKaHViZWkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQ2hpbmEiICYgUHJvdmluY2UuU3RhdGUgPT0gIkh1YmVpIikpCmh1YmVpLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkNoaW5hIiAmIFByb3ZpbmNlLlN0YXRlID09ICJIdWJlaSIpKQoKY291bnRyaWVzLmNvbmZpcm1lZCA8LSBsaXN0KHN3aXR6ZXJsYW5kLmNvbmZpcm1lZCwgaXRhbHkuY29uZmlybWVkLCBmcmFuY2UuY29uZmlybWVkLCBnZXJtYW55LmNvbmZpcm1lZCwgYXVzdHJpYS5jb25maXJtZWQsIHNwYWluLmNvbmZpcm1lZCwgdWsuY29uZmlybWVkLCBkZW5tYXJrLmNvbmZpcm1lZCwgbm9yd2F5LmNvbmZpcm1lZCwgc3dlZGVuLmNvbmZpcm1lZCwgaWNlbGFuZC5jb25maXJtZWQpCmNvdW50cmllcy5kZWF0aHMgPC0gbGlzdChzd2l0emVybGFuZC5kZWF0aHMsIGl0YWx5LmRlYXRocywgZnJhbmNlLmRlYXRocywgZ2VybWFueS5kZWF0aHMsIGF1c3RyaWEuZGVhdGhzLCBzcGFpbi5kZWF0aHMsIHVrLmRlYXRocywgZGVubWFyay5kZWF0aHMsIG5vcndheS5kZWF0aHMsIHN3ZWRlbi5kZWF0aHMsIGljZWxhbmQuZGVhdGhzKQpjb3VudHJpZXMucmVjb3ZlcmVkIDwtIGxpc3Qoc3dpdHplcmxhbmQucmVjb3ZlcmVkLCBpdGFseS5yZWNvdmVyZWQsIGZyYW5jZS5yZWNvdmVyZWQsIGdlcm1hbnkucmVjb3ZlcmVkLCBhdXN0cmlhLnJlY292ZXJlZCwgc3BhaW4ucmVjb3ZlcmVkLCB1ay5yZWNvdmVyZWQsIGRlbm1hcmsucmVjb3ZlcmVkLCBub3J3YXkucmVjb3ZlcmVkLCBzd2VkZW4uY29uZmlybWVkLCBpY2VsYW5kLnJlY292ZXJlZCkKCgpkYXkuY291bnQgPC0gTlJPVyhzd2l0emVybGFuZC5jb25maXJtZWQpCmBgYAoKIyBFdm9sdXRpb24gSW4gU3dpdHplcmxhbmQsIFdlc3Rlcm4gRXVyb3BlLCBhbmQgSHViZWkgUHJvdmluY2UgKENoaW5hKQoKVGhlIGZpZ3VyZXMgZG8gbm90IHJlcHJlc2VudCB0aGUgc2FtZSB0aGluZyBpbiBlYWNoIGNvdW50cnksIGRlcGVuZGluZyBvbiB0aGUgZXh0ZW50IG9mIHRoZSBzY3JlZW5pbmcgdGVzdHMgY2FycmllZCBvdXQuIFJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLCB0aGUgd2Vla2x5IGFuZCBkYWlseSB0cmVuZCBjdXJ2ZXMgYWxsb3cgeW91IHRvIGdldCBhbiBpZGVhIG9mIHRoZSBmb3Jlc2VlYWJsZSBldm9sdXRpb24gZm9yIHRoZSBuZXh0IGRheXMgKGFzc3VtaW5nIHRoYXQgdGhlIHNjcmVlbmluZyBzdHJhdGVneSBkb2VzIG5vdCBjaGFuZ2Ugb3ZlciB0aW1lKS4gUmVzcGVjdGl2ZWx5LCBpdCBwcm92aWRlcyBhbiBpbmRpY2F0aW9uIG9mIGEgcG9zc2libGUgaW5mbGVjdGlvbiBvZiB0aGUgcHJvZ3Jlc3Npb24gb2YgdGhlIGVwaWRlbWljIGluIHRoZSBuZWFyIGZ1dHVyZS4KCiMjIFN3aXR6ZXJsYW5kCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KHN3aXR6ZXJsYW5kLmNvbmZpcm1lZCwgc3dpdHplcmxhbmQuZGVhdGhzLCBzd2l0emVybGFuZC5yZWNvdmVyZWQsICJTd2l0emVybGFuZCIsIDU1LCBOQSkKYGBgCgojIyBJdGFseQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShpdGFseS5jb25maXJtZWQsIGl0YWx5LmRlYXRocywgaXRhbHkucmVjb3ZlcmVkLCAiSXRhbHkiLCBOQSwgNDkpCmBgYAoKIyMgRnJhbmNlCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGZyYW5jZS5jb25maXJtZWQsIGdlcm1hbnkuZGVhdGhzLCBmcmFuY2UucmVjb3ZlcmVkLCAiRnJhbmNlIiwgNTMsIDU2KQpgYGAKCiMjIEdlcm1hbnkKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoZ2VybWFueS5jb25maXJtZWQsIHN3aXR6ZXJsYW5kLmRlYXRocywgZ2VybWFueS5yZWNvdmVyZWQsICJHZXJtYW55IiwgNDgsIE5BKQpgYGAKCiMjIEF1c3RyaWEKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoYXVzdHJpYS5jb25maXJtZWQsIGF1c3RyaWEuZGVhdGhzLCBhdXN0cmlhLnJlY292ZXJlZCwgIkF1c3RyaWEiLCA1MiwgTkEpCmBgYAoKIyMgU3BhaW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoc3BhaW4uY29uZmlybWVkLCBzcGFpbi5kZWF0aHMsIHNwYWluLnJlY292ZXJlZCwgIlNwYWluIiwgTkEsIDUzKQpgYGAKCiMjIEdyZWF0IEJyaXRhaW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkodWsuY29uZmlybWVkLCB1ay5kZWF0aHMsIHVrLnJlY292ZXJlZCwgIkdyZWF0IEJyaXRhaW4iLCBOQSwgTkEpCmBgYAoKIyMgRGVubWFyawpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShkZW5tYXJrLmNvbmZpcm1lZCwgZGVubWFyay5kZWF0aHMsIGRlbm1hcmsucmVjb3ZlcmVkLCAiRGVubWFyayIsIE5BLCBOQSkKYGBgCgojIyBOb3J3YXkKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkobm9yd2F5LmNvbmZpcm1lZCwgbm9yd2F5LmRlYXRocywgbm9yd2F5LnJlY292ZXJlZCwgIk5vcndheSIsIE5BLCBOQSkKYGBgCgojIyBTd2VkZW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoc3dlZGVuLmNvbmZpcm1lZCwgc3dlZGVuLmRlYXRocywgc3dlZGVuLnJlY292ZXJlZCwgIlN3ZWRlbiIsIE5BLCBOQSkKYGBgCgojIyBJY2VsYW5kCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGljZWxhbmQuY29uZmlybWVkLCBpY2VsYW5kLmRlYXRocywgaWNlbGFuZC5yZWNvdmVyZWQsICJJY2VsYW5kIiwgTkEsIE5BKQpgYGAKCiMjIEh1YmVpIFByb3ZpbmNlLCBDaGluYQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShodWJlaS5jb25maXJtZWQsIGh1YmVpLmRlYXRocywgaHViZWkucmVjb3ZlcmVkLCAiSHViZWkgUHJvdmluY2UsIENoaW5hIiwgTkEsIDIpCmBgYAoKIyBDb21wYXJpc29uIG9mIE51bWJlciBvZiBDb25maXJtZWQgQ2FzZXMKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp4cmFuZ2UgPC0gYygzNSwgZGF5LmNvdW50KQptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dKSwgbmEucm0gPSBUUlVFKQp9CnlyYW5nZSA8LSBjKDAsIG1heC55KQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiQ29uZmlybWVkIENhc2VzIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBDYXNlcyIpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBsaW5lcyhzZXEoMSwgZGF5LmNvdW50KSwgY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dLCB0eXBlID0gImIiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IGx0eVtpXSwgcGNoID0gcGNoW2ldLCBsdyA9IDEpCn0KZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gbHR5LCBwY2ggPSBwY2gsIHRpdGxlID0gIkNvdW50cnkiKQoKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYoY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dKSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkgKiAxLjUpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgQ29uZmlybWVkIENhc2VzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBDYXNlcyBwZXIgRGF5IikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgyLCBkYXkuY291bnQpIC0gMC40NSArIDAuMDggKiBpLCBkaWZmKGNvdW50cmllcy5jb25maXJtZWRbW2ldXSksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSA0KQp9CmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IDEsIGx3ID0gNCwgdGl0bGUgPSAiQ291bnRyeSIsIG5jb2wgPSAzKQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgRGVhdGhzCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KeHJhbmdlIDwtIGMoNDAsIGRheS5jb3VudCkKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGNvdW50cmllcy5kZWF0aHNbW2ldXSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkRlYXRocyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgRGVhdGhzIikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgxLCBkYXkuY291bnQpLCBjb3VudHJpZXMuZGVhdGhzW1tpXV0sIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSBsdHksIHBjaCA9IHBjaCwgdGl0bGUgPSAiQ291bnRyeSIpCgptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZihjb3VudHJpZXMuZGVhdGhzW1tpXV0pKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKGRheS5jb3VudC0xMCwgZGF5LmNvdW50KQp5cmFuZ2UgPC0gYygwLCBtYXgueSAqIDEuNSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIk5ldyBEZWF0aHMgcGVyIERheSAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IERlYXRocyBwZXIgRGF5IikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgyLCBkYXkuY291bnQpIC0gMC40NSArIDAuMDggKiBpLCBkaWZmKGNvdW50cmllcy5kZWF0aHNbW2ldXSksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSA0KQp9CmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IDEsIGx3ID0gNCwgdGl0bGUgPSAiQ291bnRyeSIsIG5jb2wgPSAzKQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgUmVjb3ZlcmVkIENhc2VzCgpXQVJOSU5HOiBUaGUgZmlndXJlcyBzZWVtIHRvIGJlIHdyb25nIG9uIE1hcmNoIDIzLCAyMDIwLgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIG1heC55IDwtIG1heChjKG1heC55LCBjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pLCBuYS5ybSA9IFRSVUUpCn0KeHJhbmdlIDwtIGMoNTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJSZWNvdmVyZWQgQ2FzZXMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGQgPC0gbnJvdyhjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pCiAgbGluZXMoc2VxKDEsIGQpLCBjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0sIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSBsdHksIHBjaCA9IHBjaCwgdGl0bGUgPSAiQ291bnRyeSIpCgptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZihjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKGRheS5jb3VudC0xMCwgZGF5LmNvdW50KQp5cmFuZ2UgPC0gYygwLCBtYXgueSAqIDEuNSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIk5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IFJlY292ZXJlZCBDYXNlcyBwZXIgRGF5IikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgyLCBkYXkuY291bnQpIC0gMC40NSArIDAuMDggKiBpLCBkaWZmKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSA0KQp9CmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IDEsIGx3ID0gNCwgdGl0bGUgPSAiQ291bnRyeSIsIG5jb2wgPSAzKQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgQWN0aXZlIENhc2VzCgpXQVJOSU5HOiBUaGUgZmlndXJlcyBzZWVtIHRvIGJlIHdyb25nIG9uIE1hcmNoIDIzLCAyMDIwLgoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogICMgUm91Z2ggZXN0bWF0ZSB3ZSB0YWtlIHRoZSBtYXggb2YgZXZlcnl0aGluZyBhbmQgbm90IHRoZSBtYXggb2YgYWN0aXZlIGNhc2UuCiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSwgY291bnRyaWVzLnJlY292ZXJlZFtbaV1dLCBjb3VudHJpZXMuZGVhdGhzW1tpXV0pLCBuYS5ybSA9IFRSVUUpCn0KeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJBY3RpdmUgQ2FzZXMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBsaW5lcyhzZXEoMSwgZCksIHksIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSBsdHksIHBjaCA9IHBjaCwgdGl0bGUgPSAiQ291bnRyeSIpCgptaW4ueSA8LSAwCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgZGlmZih5KSksIG5hLnJtID0gVFJVRSkKICBtaW4ueSA8LSBtaW4oYyhtaW4ueSwgZGlmZih5KSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCkKeXJhbmdlIDwtIGMobWluLnksIG1heC55ICogMS41KQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiTmV3IEFjdGl2ZSBDYXNlcyBwZXIgRGF5IChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQWN0aXZlIENhc2VzIHBlciBEYXkiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgeSA8LSBjb3VudHJpZXMuY29uZmlybWVkW1tpXV0gLSAoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dICsgY291bnRyaWVzLmRlYXRoc1tbaV1dKQogIGxpbmVzKHNlcSgyLCBkYXkuY291bnQpIC0gMC40NSArIDAuMDggKiBpLCBkaWZmKHkpLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gNCkKfQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gMykKYGBgCgojIEFib3V0CgpBbGwgdGhlIGdyYXBocyBhYm92ZSBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgYnkgSm9obnMgSG9wa2lucyBDU1NFIChwcm92aWRlZCB0byB0aGUgcHVibGljIHN0cmljdGx5IGZvciBlZHVjYXRpb25hbCBhbmQgYWNhZGVtaWMgcmVzZWFyY2ggcHVycG9zZXMpLgoKVGhlIHNvdXJjZSBjb2RlIGZvciBnZW5lcmF0aW5nIHRoZSBncmFwaHMgaXMgYXZhaWxhYmxlIHVuZGVyIE1JVCBMaWNlbnNlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL2NvdmlkXzE5X3dlc3Rlcm5fZXVyb3BlLlJtZC4KClRoZSBkYXRhIGFyZSBwcm92aWRlZCBhcyAqMjAxOSBOb3ZlbCBDb3JvbmF2aXJ1cyBDT1ZJRC0xOSAoMjAxOS1uQ29WKSBEYXRhIFJlcG9zaXRvcnkgYnkgSm9obnMgSG9wa2lucyBDU1NFKiAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9DU1NFR0lTYW5kRGF0YS9DT1ZJRC0xOSkuCgpTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHBlLWRvY291cnQvQ09WSUQtMTkvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIGZvciBtb3JlIGRldGFpbHMuCgojIyBEYXRhIFNvdXJjZXMKCiogV29ybGQgSGVhbHRoIE9yZ2FuaXphdGlvbiAoV0hPKTogaHR0cHM6Ly93d3cud2hvLmludC8KKiBEWFkuY24uIFBuZXVtb25pYS4gMjAyMC4gaHR0cDovLzNnLmR4eS5jbi9uZXdoNS92aWV3L3BuZXVtb25pYS4KKiBCTk8gTmV3czogaHR0cHM6Ly9ibm9uZXdzLmNvbS9pbmRleC5waHAvMjAyMC8wMi90aGUtbGF0ZXN0LWNvcm9uYXZpcnVzLWNhc2VzLwoqIE5hdGlvbmFsIEhlYWx0aCBDb21taXNzaW9uIG9mIHRoZSBQZW9wbGXigJlzIFJlcHVibGljIG9mIENoaW5hIChOSEMpOgoqIGh0dHA6Ly93d3cubmhjLmdvdi5jbi94Y3MveXF0Yi9saXN0X2d6YmQuc2h0bWwKKiBDaGluYSBDREMgKENDREMpOiBodHRwOi8vd2Vla2x5LmNoaW5hY2RjLmNuL25ld3MvVHJhY2tpbmd0aGVFcGlkZW1pYy5odG0KKiBIb25nIEtvbmcgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmNocC5nb3YuaGsvZW4vZmVhdHVyZXMvMTAyNDY1Lmh0bWwKKiBNYWNhdSBHb3Zlcm5tZW50OiBodHRwczovL3d3dy5zc20uZ292Lm1vL3BvcnRhbC8KKiBUYWl3YW4gQ0RDOiBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vY2RjLmdvdi50dy8yMDE5bmNvdi90YWl3YW4/YXV0aHVzZXI9MAoqIFVTIENEQzogaHR0cHM6Ly93d3cuY2RjLmdvdi9jb3JvbmF2aXJ1cy8yMDE5LW5jb3YvaW5kZXguaHRtbAoqIEdvdmVybm1lbnQgb2YgQ2FuYWRhOiBodHRwczovL3d3dy5jYW5hZGEuY2EvZW4vcHVibGljLWhlYWx0aC9zZXJ2aWNlcy9kaXNlYXNlcy9jb3JvbmF2aXJ1cy5odG1sCiogQXVzdHJhbGlhIEdvdmVybm1lbnQgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmhlYWx0aC5nb3YuYXUvbmV3cy9jb3JvbmF2aXJ1cy11cGRhdGUtYXQtYS1nbGFuY2UKKiBFdXJvcGVhbiBDZW50cmUgZm9yIERpc2Vhc2UgUHJldmVudGlvbiBhbmQgQ29udHJvbCAoRUNEQyk6IGh0dHBzOi8vd3d3LmVjZGMuZXVyb3BhLmV1L2VuL2dlb2dyYXBoaWNhbC1kaXN0cmlidXRpb24tMjAxOS1uY292LWNhc2VzCiogTWluaXN0cnkgb2YgSGVhbHRoIFNpbmdhcG9yZSAoTU9IKTogaHR0cHM6Ly93d3cubW9oLmdvdi5zZy9jb3ZpZC0xOQoqIEl0YWx5IE1pbmlzdHJ5IG9mIEhlYWx0aDogaHR0cDovL3d3dy5zYWx1dGUuZ292Lml0L251b3ZvY29yb25hdmlydXMKCiMjIFRlcm1zIG9mIFVzZQoKKiBEYXRhIDogQ29weXJpZ2h0IDIwMjAgSm9obnMgSG9wa2lucyBVbml2ZXJzaXR5LCBhbGwgcmlnaHRzIHJlc2VydmVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5L2Jsb2IvbWFzdGVyL1JFQURNRS5tZC4KKiBTb3VyY2UgY29kZSBmb3IgZ2VuZXJhdGluZyBncmFwaHM6IENvcHlyaWdodCBQaGlsaXBwZSBEb2NvdXJ0LiBMaWNlbnNlZCB1bmRlciBNSVQgTGljZW5zZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsaXBwZS1kb2NvdXJ0L0NPVklELTE5L2Jsb2IvbWFzdGVyL2NvdmlkXzE5X3dlc3Rlcm5fZXVyb3BlLlJtZC4KKiBHcmFwaGljcyA6IFB1YmxpYyBEb21haW4KCg==